﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Printing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QuanLyBanHang_NewApp.BUS;
using QuanLyBanHang_NewApp.Entity;

namespace QuanLyBanHang_NewApp
{
    public partial class FormBanHang : Form
    {
        private NhanVien nVien = new NhanVien();
        private HoaDon hoaDon;
        private SanPhamBUS spBUS;
        private KhachHangBUS khBUS;
        private HoaDonBUS hdBUS;

        System.IO.StreamReader fileRead;
        public FormBanHang(NhanVien nv)
        {
            this.hoaDon = new HoaDon();
            this.spBUS = new SanPhamBUS();
            this.khBUS = new KhachHangBUS();
            this.hdBUS = new HoaDonBUS();
            nVien = nv;
            InitializeComponent();
        }

        private void FormBanHang_Load(object sender, EventArgs e)
        {
            datagridHD.DataSource = hoaDon.getDetail();
            datagridHD.Columns[0].HeaderText = "Mã sản phẩm";
            datagridHD.Columns[1].HeaderText = "Tên sản phẩm";
            datagridHD.Columns[2].HeaderText = "Giá";
            datagridHD.Columns[3].HeaderText = "Số lượng";
        }

        private void BindGrid()
        {
            BindingSource grsource = new BindingSource();
            grsource.DataSource = hoaDon.getDetail();
            datagridHD.DataSource = grsource;
            datagridHD.Columns[0].ReadOnly = true;
            datagridHD.Columns[1].ReadOnly = true;
            datagridHD.Columns[2].ReadOnly = true;
            datagridHD.Columns[3].ReadOnly = true;
        }

        private void btn_ThemSP_Click(object sender, EventArgs e)
        {
            try
            {
                SanPham sp = new SanPham();
                sp = spBUS.findByID(long.Parse(txtMasp.Text));
                if (sp != null)
                {
                    hoaDon.addCart(sp, int.Parse(txtSoluong.Text));
                    double tien = hoaDon.getPrice(double.Parse(hoaDon.getAttribute("tienthe")));

                    lblTongGia.Text = String.Format("Số tiền cần thanh toán: {0:0,0} đồng", tien);
                    BindGrid();
                }
                else
                {
                    MessageBox.Show("Không tồn tại sản phẩm này");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi !!" + ex.Message);
            }
        }

        private void btn_The_Click(object sender, EventArgs e)
        {
            if (hoaDon.getDetail().Count > 0)
            {
                KhachHang kh = khBUS.timTheoIDThe(txtMathe.Text);
                if (kh == null) MessageBox.Show("Không tồn tại số thẻ này !!!");
                else
                {
                    txtInfo.Clear();
                    hoaDon.setKH(long.Parse(kh.getAttribute(0)));
                    txtInfo.Text = kh.toString();

                    //lblTongGia.Text = "Số tiền cần thanh toán: " + hoaDon.getPrice(long.Parse(kh.getAttribute(6)));
                    
                    double tien = hoaDon.getPrice(long.Parse(kh.getAttribute(6)));

                    lblTongGia.Text = String.Format("Số tiền cần thanh toán: {0:0,0} đồng", tien);
                    
                }
            }
            else
            {
                MessageBox.Show("Chưa có mặt hàng nào trong đơn hàng !!!");
            }
        }

        private void Print()
        {
            System.IO.StreamWriter file = new System.IO.StreamWriter("hoadon.txt");
            file.Write("");
            if (txtInfo.Text != null) file.WriteLine(txtInfo.Text + "\n");


            foreach (SanPham sp in hoaDon.getDetail())
            {
                file.WriteLine(sp.getAttribute(1) + "--------Giá: " + sp.getAttribute(3) + "--------Số lượng mua: " + sp.getAttribute(4));

            }

            file.WriteLine(String.Format("Tổng giá: {0:0,0} đồng", long.Parse(hoaDon.getAttribute("tonggia"))));
            file.WriteLine(String.Format("Số tiền trong thẻ: {0:0,0} đồng", long.Parse(hoaDon.getAttribute("tienthe"))));
            file.WriteLine(String.Format("Số tiền cần thanh toán: {0:0,0} đồng", long.Parse(hoaDon.getPrice(-1).ToString())));

            file.Close();

            //try
            //{
                fileRead = new System.IO.StreamReader("hoadon.txt");
                try
                {
                    //printFont = new Font("Arial", 10);
                    PrintDocument pd = new PrintDocument();
                    pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
                    // Print the document.
                    PrintDialog prD = new PrintDialog();
                    prD.Document = pd;
                    prD.UseEXDialog = true;
                    if (DialogResult.OK == prD.ShowDialog())
                    {
                        pd.DocumentName = "Hoa Don";
                        pd.Print();
                    }



                }
                finally
                {
                    fileRead.Close();
                }
            //}
            //catch (Exception ex)
            //{
            //    MessageBox.Show(ex.Message);
            //}
        }
        private void btn_InHD_Click(object sender, EventArgs e)
        {

            Print();
            if (hoaDon.getDetail().Count > 0)
            {
                long tonggia = long.Parse(hoaDon.getAttribute("tonggia"));
                long tienthe = long.Parse(hoaDon.getAttribute("tienthe"));


                if (hdBUS.luuHoaDon(hoaDon, long.Parse(nVien.getAttribute(0))))
                {
                    long diem = (tonggia / 1000000) * 20000;
                    long makh = long.Parse(hoaDon.getAttribute("makh"));
                    if (tienthe >= tonggia) khBUS.capnhatThe(makh, tienthe - tonggia + diem);
                    else khBUS.capnhatThe(makh, diem);
                    MessageBox.Show("Thêm hóa đơn thành công");

                    hoaDon = new HoaDon();
                    lblTongGia.Text = "Tổng giá";
                    txtInfo.Text = "";
                    txtMathe.Text = "";
                    BindGrid();
                }
                else
                {
                    MessageBox.Show("Lỗi khi thêm hóa đơn");
                }
            }
            else
            {
                MessageBox.Show("Chưa có sản phẩm nào được mua");
            }
        }

        private void pd_PrintPage(object sender, PrintPageEventArgs ev)
        {
            float linesPerPage = 0;
            float yPos = 0;
            int count = 0;
            float leftMargin = ev.MarginBounds.Left;
            float topMargin = ev.MarginBounds.Top;
            String line = null;
            Font printFont = new System.Drawing.Font("Arial", 10);
            // Calculate the number of lines per page.
            linesPerPage = ev.MarginBounds.Height /
               printFont.GetHeight(ev.Graphics);

            // Iterate over the file, printing each line. 
            while (count < linesPerPage &&
               ((line = fileRead.ReadLine()) != null))
            {
                yPos = topMargin + (count * printFont.GetHeight(ev.Graphics));
                ev.Graphics.DrawString(line, printFont, Brushes.Black,
                   leftMargin, yPos, new StringFormat());
                count++;
            }

            // If more lines exist, print another page. 
            if (line != null)
                ev.HasMorePages = true;
            else
                ev.HasMorePages = false;
        }
    
        private void btn_Huy_Click(object sender, EventArgs e)
        {
            hoaDon = new HoaDon();
            lblTongGia.Text = "Tổng giá";
            txtInfo.Text = "";
            txtMathe.Text = "";
            BindGrid();
        }

        private void btn_Thoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void datagridHD_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            //MessageBox.Show(datagridHD.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());
            //try
            //{
            //    if (int.Parse(datagridHD.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString()) <= 0)
            //    {
            //        MessageBox.Show(datagridHD.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());
            //        datagridHD.Rows.RemoveAt(e.RowIndex);

            //    }
            //}
            //catch
            //{
            //    MessageBox.Show("Xảy ra lỗi! Vui lòng thử lại");
            //}
        }

        private void datagridHD_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
        {
            //MessageBox.Show(datagridHD.Rows[e.RowIndex].Cells[0].Value.ToString());
            
            
        }

        private void datagridHD_UserDeletedRow(object sender, DataGridViewRowEventArgs e)
        {
            hoaDon.deleteItem();
            BindGrid();
            //lblTongGia.Text = "Số tiền cần thanh toán: " + hoaDon.getPrice(double.Parse(hoaDon.getAttribute("tienthe")));
            double tien = hoaDon.getPrice(double.Parse(hoaDon.getAttribute("tienthe")));
            //string t = String.Format("Số tiền cần thanh toán: {0:0,0}", tien);
            lblTongGia.Text = String.Format("Số tiền cần thanh toán: {0:0,0} đồng", tien);
            
        }

        private void datagridHD_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
        {
            try
            {
                //MessageBox.Show(e.Row.Cells[0].Value.ToString());
                //hoaDon.deleteItem(long.Parse(e.Row.Cells[0].Value.ToString()));
                
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }

        private void txtSoluong_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsControl(e.KeyChar) && !Char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }
    }
}
